package br.com.boreo.boreoapp_orcamento.dao;

import java.util.ArrayList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import br.com.boreo.boreoapp_orcamento.model.Orcamento;

public class OrcamentosDAO {
	private BoreoAppOrcamentoDAO boreodao;
	/*Dados da tabela*/
	private static final String NOME_TABELA = "orcamento";
	private static final String ID = "_id";
	private static final String ID_CLIENTE = "id_cliente";
	private static final String ID_OBRA = "id_obra";
	private static final String ID_USUARIO = "id_usuario";
	private static final String ID_LOJA = "id_loja";
	private static final String DATA = "data";
	private static final String HORA = "hora";
	private static final String SINCRONIZADO = "sincronizado";
	private static final String VALOR = "valor";
	
	public OrcamentosDAO(Context context) {
		boreodao = BoreoAppOrcamentoDAO.getInstance(context);
	}

	public long inserir(int id_cliente, int id_obra, int id_usuario, int id_loja, String data, String hora, int sincronizado, double valor) {
		ContentValues valores = new ContentValues();
	    valores.put(ID_CLIENTE, id_cliente);
	    valores.put(ID_OBRA, id_obra);
	    valores.put(ID_USUARIO, id_usuario);
	    valores.put(ID_LOJA, id_loja);
	    valores.put(DATA, data);
	    valores.put(HORA, hora);
	    valores.put(SINCRONIZADO, sincronizado);
	    valores.put(VALOR, valor);
	    
	    long retorno = boreodao.getWritableDatabase().insert(NOME_TABELA, null, valores);
	    boreodao.close();
    	return retorno;
	}

	public long inserirComId(int id, int id_cliente, int id_obra, int id_usuario, int id_loja, String data, String hora, int sincronizado, double valor) {
		ContentValues valores = new ContentValues();
		valores.put(ID, id);
		valores.put(ID_CLIENTE, id_cliente);
	    valores.put(ID_OBRA, id_obra);
	    valores.put(ID_USUARIO, id_usuario);
	    valores.put(ID_LOJA, id_loja);
	    valores.put(DATA, data);
	    valores.put(HORA, hora);
	    valores.put(SINCRONIZADO, sincronizado);
	    valores.put(VALOR, valor);

	    long retorno = boreodao.getWritableDatabase().insert(NOME_TABELA, null, valores);
	    boreodao.close();
    	return retorno;
	}

	public long alterar(int id, int id_cliente, int id_obra, int id_usuario, int id_loja, String data, String hora, int sincronizado, double valor) {
		ContentValues valores = new ContentValues();
		valores.put(ID_CLIENTE, id_cliente);
	    valores.put(ID_OBRA, id_obra);
	    valores.put(ID_USUARIO, id_usuario);
	    valores.put(ID_LOJA, id_loja);
	    valores.put(DATA, data);
	    valores.put(HORA, hora);
	    valores.put(SINCRONIZADO, sincronizado);
	    valores.put(VALOR, valor);

    	String[] whereAgrs = {Integer.toString(id)};
    	int retorno = boreodao.getWritableDatabase().update(NOME_TABELA, valores, ID+" = ?", whereAgrs);
    	boreodao.close();
    	return retorno;
	}

	public ArrayList<Orcamento> selectOrcamentos() {
		ArrayList<Orcamento> c = cursorToArray(boreodao.getReadableDatabase().rawQuery("SELECT * FROM "+NOME_TABELA+" ORDER BY "+ID+" DESC", null));
		boreodao.close();
		return c;
	}

	public ArrayList<Orcamento> selectOrcamentoPorId(int id_orcamento) {
		ArrayList<Orcamento> c = cursorToArray(boreodao.getReadableDatabase().rawQuery("SELECT * FROM "+NOME_TABELA+" WHERE "+ID+" = "+id_orcamento+" ORDER BY "+ID+" DESC", null));
		boreodao.close();
		return c;
	}
	
	public ArrayList<Orcamento> selectOrcamentoNaoSincronizados() {
		ArrayList<Orcamento> c = cursorToArray(boreodao.getReadableDatabase().rawQuery("SELECT * FROM "+NOME_TABELA+" WHERE "+SINCRONIZADO+" =  0 ORDER BY "+ID+" DESC", null));
		boreodao.close();
		return c;
	}
	
	public ArrayList<Orcamento> selectOrcamentoSincronizados() {
		ArrayList<Orcamento> c = cursorToArray(boreodao.getReadableDatabase().rawQuery("SELECT * FROM "+NOME_TABELA+" WHERE "+SINCRONIZADO+" =  1 ORDER BY "+ID+" DESC", null));
		boreodao.close();
		return c;
	}
	
	public ArrayList<Orcamento> ultimoOrcamento() {
		ArrayList<Orcamento> c = cursorToArray(boreodao.getReadableDatabase().rawQuery("SELECT * FROM "+NOME_TABELA+" WHERE "+ID+" = (SELECT MAX("+ID+") FROM "+NOME_TABELA+") AND "+SINCRONIZADO+" = 0;", null));
		boreodao.close();
		return c;
	}
	
	public ArrayList<Orcamento> selectOrcamentoPorCliente(String cliente, int sincronizado) {
		
		ArrayList<Orcamento> c = cursorToArray(boreodao.getReadableDatabase().rawQuery("SELECT * FROM "+NOME_TABELA+" O LEFT OUTER JOIN CLIENTES C ON (C._ID=O.ID_CLIENTE) WHERE C.NOME LIKE '"+cliente+"' AND "+SINCRONIZADO+" = "+sincronizado+" ORDER BY O."+ID+" DESC", null));
		//ArrayList<Orcamento> c = cursorToArray(boreodao.getReadableDatabase().rawQuery("SELECT * FROM ORCAMENTO O LEFT JOIN CLIENTES C ON C.ID = O.ID_CLIENTE WHERE C.NOME LIKE '"+cliente+"' ORDER BY O.ID", null));
		boreodao.close();
		return c;
	}
	
	public void excluirOrcamentoPorId(int id_orcamento) {
		boreodao.getReadableDatabase().delete(NOME_TABELA,ID+"="+id_orcamento,null);
		boreodao.close();
	}
	
	public void excluirTodosOrcamentos() {
		boreodao.getReadableDatabase().delete(NOME_TABELA, null, null);
	}

	public String mudarParaSincronizada(int id_orcamento) {
		String retorno = "";
		ContentValues valores = new ContentValues();
		valores.put(SINCRONIZADO, 1);
		String[] whereArgs = {Integer.toString(id_orcamento)};
		int update = boreodao.getWritableDatabase().update(NOME_TABELA, valores, ID+" = ?", whereArgs);
		if(update != 1)
			retorno = "erro";
		else
			retorno = "ok";
		boreodao.close();
		return retorno;
	}
	
	private ArrayList<Orcamento> cursorToArray(Cursor c){
		ArrayList<Orcamento> orcamentos = new ArrayList<Orcamento>();
		while (c.moveToNext()) {
			orcamentos.add(new Orcamento(c.getInt(0), c.getInt(1), c.getInt(2), c.getInt(3), c.getInt(4), c.getString(5), c.getString(6), c.getInt(7), c.getDouble(8)));
		}
		return orcamentos;
	}
}
